package com.leetcode;

import java.util.HashMap;
import java.util.Map;

import org.omg.Messaging.SYNC_WITH_TRANSPORT;

public class P0506RelativeRanks {

	
	public static void main(String[] args) {
//		System.out.println(singleNumber(1994));
		int[] num = {10,3,8,9,4,23,12,123,35,677,786,2344};
		findRelativeRanks(num);
	}
	
    public static String[] findRelativeRanks(int[] nums) {
    	Long a = System.currentTimeMillis();
        String[] ranks = new String[nums.length];
        Integer[] modo = new Integer[nums.length];
        
        for(int i = 0 ; i < nums.length ; i ++) {
        	modo[i] = nums[i];
        }
        
        int top3 = (nums.length > 3)? 3 : nums.length;
        
        for(int i = 0 ; i < nums.length ; i ++) {
        	for(int j = i + 1 ; j < nums.length ; j++) {
        		if(nums[i]< nums[j]) {
        			nums[i] ^= nums[j];
        			nums[j] ^= nums[i];
        			nums[i] ^= nums[j];
        			
        		}
        	}
        }

        String[] top3Str = {"Gold Medal", "Silver Medal", "Bronze Medal"};
        Map<Integer, String> map = new HashMap<>();
        
        for(int i = 0 ; i < top3; i ++) {
        	map.put(nums[i], top3Str[i]);
        }
        
        if(nums.length > 3) {
        	for(int i = 3 ; i < nums.length ; i ++) {
        		map.put(nums[i], String.valueOf(i+1));
        	}
        }
        
        for(int i = 0 ; i < nums.length ; i  ++) {
        	ranks[i] = map.get(modo[i]);
//        	System.out.println(ranks[i]);
        }
        
        
        System.out.println(System.currentTimeMillis() - a);
        return ranks;
        
    }
    
    
    //桶排， 我应该想到的
    
//    public String[] findRelativeRanks(int[] nums) {
//        int max=0;
//        for(int i=0;i<nums.length;i++){
//            if(nums[i]>max){
//                max=nums[i];
//            }
//        }
//        String result[]=new String[nums.length];
//        int[] temp=new int[max+1];
//        for(int i=0;i<nums.length;i++){
//            temp[nums[i]]=i+1;
//        }
//        int count=1;
//        for(int i=temp.length-1;i>=0;i--){
//            if(temp[i]==0){
//                continue;
//            }
//            if(count<=3){
//                if(count==1){
//                    result[temp[i]-1]="Gold Medal";
//                }else if(count==2){
//                    result[temp[i]-1]="Silver Medal";
//                }else if(count==3){
//                    result[temp[i]-1]="Bronze Medal";
//                }
//            }else{
//                result[temp[i]-1]=count+"";
//            }
//            count++;
//        }
//        return result;
//    }
    
	
}
